<?php
/*
===============================================================================
	Contiene todas aquellas funciones con relacion a Reportes que nesesite
	consultar registros de varias tablas en la base de datos.
===============================================================================
 */
class Reportes_Model extends CI_Model
{
	const TABLA_CURSOS    = 'cursos_lx_np_2013';
	const TABLA_MAESTROS  = 'maestros_lx_np_2013';
	const TABLA_ENCUESTA  = 'encuesta_lx_np_2013';
	const TABLA_MATERIA   = 'materias_lx_np_2013';
	const TABLA_MATE_ALUM = 'mate_alum_lx_np_2013';
	const TABLA_ALUMNOS   = 'alumnos_2013';
	var $registros_num    = 0;
	var $resultado 	      = NULL;

	/*
	====================
	ObtenerAlumEvaGeneral

	Obtiene los registros del reporte Alumnos evaluados general.
	====================
	*/

	function ObtenerAlumEvaGeneral()
	{
		$query = "	SELECT Encuestados,((SELECT COUNT(matricula) FROM " . self::TABLA_ALUMNOS . ")-Encuestados) AS NoEncuestados,(SELECT COUNT(matricula) FROM " . self::TABLA_ALUMNOS . ") AS Todos
					FROM(
						SELECT COUNT(matricula) AS Encuestados
						FROM " . self::TABLA_ALUMNOS . " AS Alumnos
						WHERE matricula
						IN(
							SELECT matricula
							FROM " . self::TABLA_ENCUESTA . " AS Encuestas)) AS res";
		$res = $this->db->query($query);
		if ( $res->num_rows() > 0 ) {
			foreach ($res->result() as $fila) {
				$this->resultado[] = $fila;
			}
			return TRUE;
		}
		return FALSE;
	}

	/*
	====================
	ObtenerDocentesPromGeneral

	Obtiene los registros del reporte Docentes con promedio general en sus materias.
	Los registros retornados depende del "offset" cual lo define al momento de dar click
	en el enlace de cualquier pagina.
	====================
	*/
	function ObtenerDocentesPromGeneral()
	{
		//paginacion
		$offset = $this->uri->segment(3);
		if ( $offset == '' ) {
			$offset = 0;
		}
		$limit = 20;
		$query = "	SELECT id,nombre,IF(ISNULL(AVG(resultado)),0,AVG(resultado)) AS promedio
					FROM encuesta_lx_np_2013 AS Encuesta
					RIGHT JOIN (
						SELECT id_curso,id,nombre,materia
						FROM cursos_lx_np_2013 AS Cursos
						RIGHT JOIN maestros_lx_np_2013 AS Maestros
						ON Cursos.maestro = Maestros.id) AS t1
					ON Encuesta.id_curso = t1.id_curso
					GROUP BY id
					ORDER BY promedio DESC";
		$this->ContarRegistros($query);
		$query .=	"
					LIMIT $limit
					OFFSET $offset;";
		$res = $this->db->query($query);
		if ( $res->num_rows() > 0 ) {
			foreach ($res->result() as $fila) {
				$this->resultado[] = $fila;
			}
			return TRUE;
		}
		return FALSE;
	}

	/*
	====================
	ObtenerDocentesMateriaIndividual

	TODO:://
	====================
	*/
	function ObtenerDocentesMateriaIndividual($id_profesor)
	{
		//paginacion
		$offset = $this->uri->segment(3);
		if ( $offset == '' ) {
			$offset = 0;
		}
		$limit = 20;
		$query =	"	SELECT id,maestro,materia,nombre,IF(ISNULL(AVG(resultado)),'N/A',AVG(resultado)) AS promedio 
					 	FROM " . self::TABLA_ENCUESTA . " AS enc
						RIGHT JOIN (
							SELECT id_curso,id,maestro,materia,mate.nombre
							FROM " . self::TABLA_MATERIA . " AS mate
							RIGHT JOIN(
								SELECT id_curso,id,nombre AS maestro,materia
								FROM " . self::TABLA_CURSOS . " AS curs
								RIGHT JOIN " . self::TABLA_MAESTROS . " AS maest
								ON curs.maestro = maest.id) AS t1
							ON mate.clave = t1.materia) AS t2
						ON enc.id_curso = t2.id_curso
						WHERE id = $id_profesor
						GROUP BY materia
						ORDER BY id ASC";
		$this->ContarRegistros($query);
		$query .=	"
					LIMIT $limit
					OFFSET $offset;";
		$res = $this->db->query($query);
		if ( $res->num_rows() > 0 ) {
			foreach ($res->result() as $fila) {
				$this->resultado[] = $fila;
			}
			return TRUE;
		}
		return FALSE;
	}

	/*
	====================
	ObtenerAlumEvaDocente

	Obtiene los registros de el total de alumnos que han y no hay evaluados por cada docente.
	====================
	*/
	function ObtenerAlumEvaDocente()
	{
		//paginacion
		$offset = $this->uri->segment(3);
		if ( $offset == '' ) {
			$offset = 0;
		}
		$limit = 50;
		$query =	"	SELECT encuestados.id,encuestados.nombre,AlumnosEncuestados,(AlumnosEncuestados/total_alumnos_por_maest * 100)
							AS EncPorc,(total_alumnos_por_maest - AlumnosEncuestados)
							AS AlumnosNoEncuestados,(100 - (AlumnosEncuestados/total_alumnos_por_maest * 100))
							AS NoEncPorc,total_alumnos_por_maest
						FROM(
							SELECT id_curso,id,nombre,AlumnosEncuestados
							FROM (
								SELECT enc.id_curso,id,nombre,COUNT(matricula) AS AlumnosEncuestados
								FROM (
									SELECT id_curso,id,nombre
									FROM " . self::TABLA_MAESTROS . " AS maest
									LEFT JOIN " . self::TABLA_CURSOS . " AS curs
									ON maest.id = curs.maestro) AS maestros
								LEFT JOIN " . self::TABLA_ENCUESTA . " AS enc
								ON maestros.id_curso = enc.id_curso GROUP BY id) AS t1
							) AS encuestados
							INNER JOIN(
								SELECT maestros.id_curso,id,nombre,COUNT(matricula) AS total_alumnos_por_maest
								FROM (
									SELECT id_curso,id,nombre
									FROM " . self::TABLA_MAESTROS . " AS maest
									INNER JOIN " . self::TABLA_CURSOS . " AS curs
									ON maest.id = curs.maestro
								) AS maestros
							INNER JOIN " . self::TABLA_MATE_ALUM . "
							ON maestros.id_curso = " . self::TABLA_MATE_ALUM . ".id_curso GROUP BY id
							) AS todos
						ON encuestados.id = todos.id
						ORDER BY AlumnosEncuestados DESC ";
		$this->ContarRegistros($query);
		$query .=	"
					LIMIT $limit
					OFFSET $offset;";
		$res = $this->db->query($query);
		if ( $res->num_rows() > 0 ) {
			foreach ($res->result() as $fila) {
				$this->resultado[] = $fila;
			}
			return TRUE;
		}
		return FALSE;
	}

	/*
	====================
	ContarRegistros

	Cuenta los registros obtenidos de la consulta especificada.
	Se utiliza para la paginacion de las tablas.
	====================
	*/
	function ContarRegistros($query)
	{
		$this->registros_num = 0;
		$this->resultado = NULL;
		$res = $this->db->query($query);
		$this->registros_num = $res->num_rows();
	}
}
?>